<?php
class imageProcessor {
	static function saveNewAvatar($userId, $uploadedFileInfo) {
		if ($uploadedFileInfo['error']>0) return false;

		$path = imageProcessor::getPathByUserId($userId);
		if (!is_dir($path)) mkdir($path, 0777, true);

		if (move_uploaded_file($uploadedFileInfo['tmp_name'], $path.basename($uploadedFileInfo['tmp_name']))) {
			list($w, $h) = explode("x", AVATAR_SIZE_SMALL);
			imageProcessor::cropImage($w, $h, $path.basename($uploadedFileInfo['tmp_name']), $path."avatar_".AVATAR_SIZE_SMALL.".jpg");
			list($w, $h) = explode("x", AVATAR_SIZE_MEDIUM);
			imageProcessor::cropImage($w, $h, $path.basename($uploadedFileInfo['tmp_name']), $path."avatar_".AVATAR_SIZE_MEDIUM.".jpg");
			list($w, $h) = explode("x", AVATAR_SIZE_LARGE);
			imageProcessor::cropImage($w, $h, $path.basename($uploadedFileInfo['tmp_name']), $path."avatar_".AVATAR_SIZE_LARGE.".jpg");
			unlink($path.basename($uploadedFileInfo['tmp_name']));
			return true;
		}
		return false;
	}
	
	static function getPathByUserId($userId, $getUrl=false) {
		$hash = sprintf("%010u", crc32($userId));
		$path = ($getUrl?"/":ROOT_PATH).'images/'.substr($hash, 0, 3).'/'.substr($hash, 3, 3).'/'.substr($hash, 6).'/';
		return $path;
	}
	
	static function getAvatarUrl($userId, $size) {
		if (is_file(imageProcessor::getPathByUserId($userId)."avatar_".$size.".jpg")) {
			return imageProcessor::getPathByUserId($userId, true)."avatar_".$size.".jpg";
		} else {
			return null;
		}
	}

	static function cropImage($nw, $nh, $source, $dest) {
		list($w, $h, $t) = getimagesize($source);
		if ($t == 1) $simg = imagecreatefromgif($source);
		elseif ($t == 2) $simg = imagecreatefromjpeg($source);
		elseif ($t == 3) $simg = imagecreatefrompng($source);
		$dimg = imagecreatetruecolor($nw, $nh);
		$wm = $w/$nw;
		$hm = $h/$nh;
		$h_height = $nh/2;
		$w_height = $nw/2;
		if($w> $h) {
			$adjusted_width = $w / $hm;
			$half_width = $adjusted_width / 2;
			$int_width = $half_width - $w_height;
			imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
		} elseif(($w <$h) || ($w == $h)) {
			$adjusted_height = $h / $wm;
			$half_height = $adjusted_height / 2;
			$int_height = $half_height - $h_height;
			imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
		} else {
			imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
		}
		imagejpeg($dimg,$dest,90);
	}
}
?>